package Controlador;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.util.Vector;

import javax.swing.JOptionPane;
import javax.swing.ComboBoxModel;
import javax.swing.DefaultComboBoxModel;

import Modelo.Cooperativa;
import Modelo.Ruta;
import Modelo.Terminal;
import Vista.VRuta;
@SuppressWarnings("all")
public class CRuta implements ActionListener, ItemListener{

	//clase con las que se va a trabajar
	
	private int varBusqueda;
	private Cooperativa co;
	private VRuta vru;
	private Ruta ru;
	private Terminal ter;
	
	//Combo de ciudades
	
	 

	
	//constructor de la clase
	
	public CRuta(Cooperativa co, Terminal ter, CCooperativa controladorcooperativa){
		
		super();
		
		this.co = co;
		this.vru = new VRuta(this);
		this.ru = new Ruta();
		this.vru.setVisible(true);
		this.ter = ter;
		DefinirCooperativa();
		vru.getTxtCooperativa().setVisible(false);
		vru.getCmbCiudad().setVisible(false);
		
	}
	
	
	private void DefinirCooperativa() {
		vru.getTxtCooperativa().setText(co.getCodigo());
		
	}


		//Metodos Para accionar los botones
		@Override
		public void actionPerformed(ActionEvent e) {
		      if(e.getActionCommand().toLowerCase().equals("modificar"))
		      {
		    	  		Modificar();
		      }
		      else if(e.getActionCommand().toLowerCase().equals("guardar"))
		      {
		    	  		Guardar();
		      }else if(e.getActionCommand().toLowerCase().equals("limpiar"))
		      {
		    	  Limpiar();
		      }else if(e.getActionCommand().toLowerCase().equals("eliminar"))
		      {
		    	  Eliminar();
		      }
		      else if(e.getActionCommand().toLowerCase().equals("buscar")){
		    	  Buscar();
		      }

		}
		
		//metodo para limpiar los campos de texto
		
		public void Limpiar(){
			
			//pone los campos de texto en blanco
			vru.getTxtCodigo().setText("");
			vru.getTxtDescripcion().setText("");
			vru.getTxtDistancia().setText("");
			vru.getTxtTiempo().setText("");
			
			
			//habilita todos los botones
			vru.getBtnBuscar().setEnabled(true);
			vru.getBtnEliminar().setEnabled(true);
			vru.getBtnModificar().setEnabled(true);
			vru.getBtnGuardar().setEnabled(true);
			
			//habilita todos los campos de texto
			
			vru.getTxtCodigo().setEnabled(true);
			vru.getTxtDescripcion().setEnabled(true);
			vru.getTxtDistancia().setEnabled(true);
			vru.getTxtTiempo().setEnabled(true);
			vru.getCmbCiudad().setEnabled(true);
			vru.getCmbEstado().setEnabled(true);
			
			varBusqueda = 0;
			
			//vuelve a su estado normal los combos
			ComboBoxModel cmbEstados = new DefaultComboBoxModel(new String[] {"Seleccione un estado","Lara", "Zulia", "Portuguesa", "Amazonas", "Merida"});
			vru.getCmbEstado().removeAllItems();
			vru.getCmbEstado().setModel(cmbEstados);
			vru.getCmbCiudad().setVisible(false);
			
	
			
			
		}
		
		public void Modificar(){
			
		}
		
		public void GuardarArchivoRuta(String codigo, String descripcion, String ciudad, String estado, float distancia, float tiempo, String cooperativa){
			
			Ruta ru = new Ruta();
			ru.setCodigo(codigo);
			ru.setDescripcion(descripcion);
			ru.setCiudad(ciudad);
			ru.setEstado(estado);
			ru.setDistancia(distancia);
			ru.setTiempo(tiempo);
			ru.setCooperativa(cooperativa);
			co.agregarRuta(ru);
			
			vru.limpiarTabla();
			llenarTabla();
			
		}
		
		public void Guardar(){
			
			if(validarDatos()){
				
				Ruta ru = new Ruta();
				ru.setCodigo(this.vru.getTxtCodigo().getText().toString());
				ru.setDescripcion(this.vru.getTxtDescripcion().getText().toString());
				ru.setDistancia(Float.parseFloat(vru.getTxtDistancia().getText().toString()));
				ru.setTiempo(Float.parseFloat(vru.getTxtTiempo().getText().toString()));
				ru.setCiudad(vru.getCmbCiudad().getSelectedItem().toString());
				ru.setEstado(vru.getCmbEstado().getSelectedItem().toString());
				ru.setCooperativa(vru.getTxtCooperativa().getText().toString());
				co.agregarRuta(ru);
				JOptionPane.showMessageDialog(null, "Registro Ruta Exitoso", "Guardar Ruta", 1);
				vru.getTxtCodigo().setText("");
				vru.getTxtDescripcion().setText("");
				vru.getTxtDistancia().setText("");
				vru.getTxtTiempo().setText("");
				vru.limpiarTabla();
				llenarTabla();
			}
		}
		
		public void Eliminar(){
			varBusqueda = 0;
		}
		
		
		public void llenarTabla() {
			

			

			for (int k = 0; k < co.contarRutas(); k++) {
					
					if(co.getRutas().get(k).getCooperativa().equals(co.getCodigo())){
						
					
						Vector<String> datos = new Vector<String>(2, 1);
						
						
						String codigo = co.obtenerRuta(k).getCodigo();
						String descripcion = co.obtenerRuta(k).getDescripcion();
						String estado = co.obtenerRuta(k).getEstado();
						datos.add(codigo);
						datos.add(descripcion);
						datos.add(estado);
						vru.agregarFilaTblRutas(datos);
					}
					
			}
		}
		
		public void Buscar(){
			
	
			Ruta rutabuscada;
			if((vru.getTxtCodigo().getText().equals(""))){
				vru.mostrarMensaje("Debe llenar el campo codigo para poder buscar");		
			}else if(vru.getTxtCodigo().getText().toString() != "")
			{
				String codigo = vru.getTxtCodigo().getText().toString();
				if(co.buscarRuta(codigo) == null){
					vru.mostrarMensajeError("La ruta con codigo " + codigo + " no existe");
				}else{
				
				
						rutabuscada = co.buscarRuta(codigo);
						String[] ciudad = {rutabuscada.getCiudad().toString()};
						String[] estado = {rutabuscada.getEstado().toString()};
						
						ComboBoxModel cmbCiudadRuta = new DefaultComboBoxModel(ciudad);
						ComboBoxModel cmbEstadoRuta = new DefaultComboBoxModel(estado);
						if(co.buscarRuta(codigo) == null ){
							
						}else
						 {
							
							rutabuscada = co.buscarRuta(codigo);
							vru.getTxtCodigo().setEnabled(false);
							vru.getTxtDescripcion().setEnabled(false);
							vru.getTxtDistancia().setEnabled(false);
							vru.getTxtTiempo().setEnabled(false);
							vru.getCmbCiudad().setEnabled(false);
							vru.getCmbEstado().setEnabled(false);
							
							
							
							vru.getTxtDescripcion().setText(rutabuscada.getDescripcion().toString());
							vru.getTxtDistancia().setText(String.valueOf(rutabuscada.getDistancia()));
							vru.getTxtTiempo().setText(String.valueOf(rutabuscada.getTiempo()));
							vru.getTxtCooperativa().setText(rutabuscada.getCooperativa());
							vru.getCmbEstado().setModel(cmbEstadoRuta);
							vru.getCmbCiudad().setModel(cmbCiudadRuta);
							vru.getCmbCiudad().setVisible(true);
						
							
							vru.getBtnGuardar().setEnabled(false);
							vru.getBtnBuscar().setEnabled(false);
							varBusqueda = 1;
						}
				
				}

			}
		}
		
		// Metodo para validar los datos
		
		public boolean validarDatos(){
			if(vru.getTxtCodigo().getText().toString().equalsIgnoreCase("")){
				vru.mostrarMensaje("Debe ingresar un codigo de ruta");
				return false;
			}else if (vru.getTxtDescripcion().getText().toString().equalsIgnoreCase("")){
				vru.mostrarMensaje("Debe ingresar una descripcion de ruta");
				return false;
			}else if (vru.getTxtDistancia().getText().toString().equalsIgnoreCase("")){
				vru.mostrarMensaje("Debe ingresar una distancia de ruta");
				return false;
			}else if (vru.getTxtTiempo().getText().toString().equalsIgnoreCase("")){
				vru.mostrarMensaje("Debe ingresar el tiempo de viaje de ruta");
				return false;
			}else if (vru.getTxtCooperativa().getText().toString().equalsIgnoreCase("")){
				vru.mostrarMensaje("Debe ingresar la cooperativa a la que pertenece la ruta");
				return false;
			}else if(vru.getCmbEstado().getSelectedIndex() == 0){
				vru.mostrarMensaje("Debe ingresar un estado al que pertenece la ruta");
				return false;
			}else if(co.buscarRuta(vru.getTxtCodigo().getText().toString()) != null){
				vru.mostrarMensaje("Ya la ruta con codigo " + vru.getTxtCodigo().getText().toString() + " existe");
				
				return false;
			}
			
			return true; //en caso de que esten llenos los campos
			
		}
		
		
		@SuppressWarnings("static-access")
		@Override
		public void itemStateChanged(ItemEvent e) {
			if (e.getStateChange() == e.SELECTED) {
				if (e.getSource().equals(vru.getCmbEstado())) {
					
						String rutaestado = vru.getCmbEstado().getSelectedItem().toString();
						
						
						if (rutaestado.toLowerCase().toString().equalsIgnoreCase("zulia")){
							ComboBoxModel cmbZulia = new DefaultComboBoxModel(new String[] {"Maracaibo", "Machiques"});
							vru.getCmbCiudad().setVisible(true);
							vru.getCmbCiudad().setModel(cmbZulia);
						}else if(rutaestado.toLowerCase().toString().equalsIgnoreCase("lara")){
							ComboBoxModel cmbLara = new DefaultComboBoxModel(new String[] {"Barquisimeto", "Quibor", "Sarare"});
							vru.getCmbCiudad().setVisible(true);
							vru.getCmbCiudad().setModel(cmbLara);
						}else if(rutaestado.toLowerCase().toString().equalsIgnoreCase("amazonas")){
							ComboBoxModel cmbAmazonas = new DefaultComboBoxModel(new String[] {"Puerto Ayacucho", "San Fernando"});
							vru.getCmbCiudad().setVisible(true);
							vru.getCmbCiudad().setModel(cmbAmazonas);
						}else if(rutaestado.toLowerCase().toString().equalsIgnoreCase("portuguesa")){
							ComboBoxModel cmbPortuguesa = new DefaultComboBoxModel(new String[] {"Acarigua", "Guanare", "Biscucuy"});
							vru.getCmbCiudad().setVisible(true);
							vru.getCmbCiudad().setModel(cmbPortuguesa);
						}else if(rutaestado.toLowerCase().toString().equalsIgnoreCase("merida")){
							ComboBoxModel cmbMerida = new DefaultComboBoxModel(new String[] {"El vigia", "Ejido", "Mucuchies", "Apartaderos"});
							vru.getCmbCiudad().setVisible(true);
							vru.getCmbCiudad().setModel(cmbMerida);
						}else if(rutaestado.toLowerCase().toString().equalsIgnoreCase("distrito capital")){
							ComboBoxModel cmbCapital = new DefaultComboBoxModel(new String[] {"Caracas", "San Juan", "Sucre", "El junquito"});
							vru.getCmbCiudad().setVisible(true);
							vru.getCmbCiudad().setModel(cmbCapital);
							
						}
						else{
							vru.getCmbCiudad().setVisible(false);
						}
							

						
					
				}
			}
		}
}
